def 'nu-complete komorebic commands' [] {
  [[value description];
   [quickstart 'Gather example configurations for a new-user quickstart']
   [start 'Start komorebi.exe as a background process']
   [stop 'Stop the komorebi.exe process and restore all hidden windows']
   [check 'Check komorebi configuration and related files for common errors']
   [configuration 'Show the path to komorebi.json']
   [bar-configuration 'Show the path to komorebi.bar.json']
   [whkdrc 'Show the path to whkdrc']
   [state 'Show a JSON representation of the current window manager state']
   [global-state 'Show a JSON representation of the current global state']
   [gui 'Launch the komorebi-gui debugging tool']
   [visible-windows 'Show a JSON representation of visible windows']
   [monitor-information 'Show information about connected monitors']
   [query 'Query the current window manager state']
   [subscribe-socket 'Subscribe to komorebi events using a Unix Domain Socket']
   [unsubscribe-socket 'Unsubscribe from komorebi events']
   [subscribe-pipe 'Subscribe to komorebi events using a Named Pipe']
   [unsubscribe-pipe 'Unsubscribe from komorebi events']
   [log "Tail komorebi.exe's process logs (cancel with Ctrl-C)"]
   [quick-save-resize 'Quicksave the current resize layout dimensions']
   [quick-load-resize 'Load the last quicksaved resize layout dimensions']
   [save-resize 'Save the current resize layout dimensions to a file']
   [load-resize 'Load the resize layout dimensions from a file']
   [focus 'Change focus to the window in the specified direction']
   [move 'Move the focused window in the specified direction']
   [minimize 'Minimize the focused window']
   [close 'Close the focused window']
   [force-focus 'Forcibly focus the window at the cursor with a left mouse click']
   [cycle-focus 'Change focus to the window in the specified cycle direction']
   [cycle-move 'Move the focused window in the specified cycle direction']
   [stack 'Stack the focused window in the specified direction']
   [unstack 'Unstack the focused window']
   [cycle-stack 'Cycle the focused stack in the specified cycle direction']
   [focus-stack-window 'Focus the specified window index in the focused stack']
   [stack-all 'Stack all windows on the focused workspace']
   [unstack-all 'Unstack all windows in the focused container']
   [resize-edge 'Resize the focused window in the specified direction']
   [resize-axis 'Resize the focused window or primary column along the specified axis']
   [move-to-monitor 'Move the focused window to the specified monitor']
   [cycle-move-to-monitor 'Move the focused window to the monitor in the given cycle direction']
   [move-to-workspace 'Move the focused window to the specified workspace']
   [move-to-named-workspace 'Move the focused window to the specified workspace']
   [cycle-move-to-workspace 'Move the focused window to the workspace in the given cycle direction']
   [send-to-monitor 'Send the focused window to the specified monitor']
   [cycle-send-to-monitor 'Send the focused window to the monitor in the given cycle direction']
   [send-to-workspace 'Send the focused window to the specified workspace']
   [send-to-named-workspace 'Send the focused window to the specified workspace']
   [cycle-send-to-workspace 'Send the focused window to the workspace in the given cycle direction']
   [send-to-monitor-workspace 'Send the focused window to the specified monitor workspace']
   [move-to-monitor-workspace 'Move the focused window to the specified monitor workspace']
   [focus-monitor 'Focus the specified monitor']
   [focus-last-workspace 'Focus the last focused workspace on the focused monitor']
   [focus-workspace 'Focus the specified workspace on the focused monitor']
   [focus-workspaces 'Focus the specified workspace on all monitors']
   [focus-monitor-workspace 'Focus the specified workspace on the target monitor']
   [focus-named-workspace 'Focus the specified workspace']
   [cycle-monitor 'Focus the monitor in the given cycle direction']
   [cycle-workspace 'Focus the workspace in the given cycle direction']
   [move-workspace-to-monitor 'Move the focused workspace to the specified monitor']
   [cycle-move-workspace-to-monitor 'Move the focused workspace monitor in the given cycle direction']
   [swap-workspaces-with-monitor 'Swap focused monitor workspaces with specified monitor']
   [new-workspace 'Create and append a new workspace on the focused monitor']
   [resize-delta 'Set the resize delta (used by resize-edge and resize-axis)']
   [invisible-borders 'Set the invisible border dimensions around each window']
   [global-work-area-offset 'Set offsets to exclude parts of the work area from tiling']
   [monitor-work-area-offset 'Set offsets for a monitor to exclude parts of the work area from tiling']
   [focused-workspace-container-padding 'Set container padding on the focused workspace']
   [focused-workspace-padding 'Set workspace padding on the focused workspace']
   [adjust-container-padding 'Adjust container padding on the focused workspace']
   [adjust-workspace-padding 'Adjust workspace padding on the focused workspace']
   [change-layout 'Set the layout on the focused workspace']
   [cycle-layout 'Cycle between available layouts']
   [flip-layout 'Flip the layout on the focused workspace (BSP only)']
   [promote 'Promote the focused window to the top of the tree']
   [promote-focus 'Promote the user focus to the top of the tree']
   [promote-window 'Promote the window in the specified direction']
   [retile 'Force the retiling of all managed windows']
   [monitor-index-preference 'Set the monitor index preference for a monitor identified using its size']
   [display-index-preference 'Set the display index preference for a monitor identified using its display name']
   [ensure-workspaces 'Create at least this many workspaces for the specified monitor']
   [ensure-named-workspaces 'Create these many named workspaces for the specified monitor']
   [container-padding 'Set the container padding for the specified workspace']
   [named-workspace-container-padding 'Set the container padding for the specified workspace']
   [workspace-padding 'Set the workspace padding for the specified workspace']
   [named-workspace-padding 'Set the workspace padding for the specified workspace']
   [workspace-layout 'Set the layout for the specified workspace']
   [named-workspace-layout 'Set the layout for the specified workspace']
   [workspace-layout-rule 'Add a dynamic layout rule for the specified workspace']
   [named-workspace-layout-rule 'Add a dynamic layout rule for the specified workspace']
   [clear-workspace-layout-rules 'Clear all dynamic layout rules for the specified workspace']
   [clear-named-workspace-layout-rules 'Clear all dynamic layout rules for the specified workspace']
   [workspace-tiling 'Enable or disable window tiling for the specified workspace']
   [named-workspace-tiling 'Enable or disable window tiling for the specified workspace']
   [workspace-name 'Set the workspace name for the specified workspace']
   [toggle-window-container-behaviour 'Toggle the behaviour for new windows (stacking or dynamic tiling)']
   [toggle-float-override 'Enable or disable float override, which makes it so every new window opens in floating mode']
   [toggle-workspace-window-container-behavior 'Toggle the behaviour for new windows (stacking or dynamic tiling) for currently focused workspace. If there was no behaviour set for the workspace previously it takes the opposite of the global value']
   [toggle-workspace-float-override 'Enable or disable float override, which makes it so every new window opens in floating mode, for the currently focused workspace. If there was no override value set for the workspace previously it takes the opposite of the global value']
   [toggle-pause 'Toggle window tiling on the focused workspace']
   [toggle-tiling 'Toggle window tiling on the focused workspace']
   [toggle-float 'Toggle floating mode for the focused window']
   [toggle-monocle 'Toggle monocle mode for the focused container']
   [toggle-maximize 'Toggle native maximization for the focused window']
   [restore-windows 'Restore all hidden windows (debugging command)']
   [manage 'Force komorebi to manage the focused window']
   [unmanage 'Unmanage a window that was forcibly managed']
   [replace-configuration 'Replace the configuration of a running instance of komorebi from a static configuration file']
   [reload-configuration 'Reload legacy komorebi.ahk or komorebi.ps1 configurations (if they exist)']
   [watch-configuration 'Enable or disable watching of legacy komorebi.ahk or komorebi.ps1 configurations (if they exist)']
   [complete-configuration 'For legacy komorebi.ahk or komorebi.ps1 configurations, signal that the final configuration option has been sent']
   [window-hiding-behaviour 'Set the window behaviour when switching workspaces / cycling stacks']
   [cross-monitor-move-behaviour 'Set the behaviour when moving windows across monitor boundaries']
   [toggle-cross-monitor-move-behaviour 'Toggle the behaviour when moving windows across monitor boundaries']
   [unmanaged-window-operation-behaviour 'Set the operation behaviour when the focused window is not managed']
   [ignore-rule 'Add a rule to ignore the specified application']
   [manage-rule 'Add a rule to always manage the specified application']
   [initial-workspace-rule 'Add a rule to associate an application with a workspace on first show']
   [initial-named-workspace-rule 'Add a rule to associate an application with a named workspace on first show']
   [workspace-rule 'Add a rule to associate an application with a workspace']
   [named-workspace-rule 'Add a rule to associate an application with a named workspace']
   [clear-workspace-rules 'Remove all application association rules for a workspace by monitor and workspace index']
   [clear-named-workspace-rules 'Remove all application association rules for a named workspace']
   [clear-all-workspace-rules 'Remove all application association rules for all workspaces']
   [identify-object-name-change-application 'Identify an application that sends EVENT_OBJECT_NAMECHANGE on launch']
   [identify-tray-application 'Identify an application that closes to the system tray']
   [identify-layered-application 'Identify an application that has WS_EX_LAYERED, but should still be managed']
   [remove-title-bar 'Whitelist an application for title bar removal']
   [toggle-title-bars 'Toggle title bars for whitelisted applications']
   [border 'Enable or disable borders']
   [border-colour 'Set the colour for a window border kind']
   [border-width 'Set the border width']
   [border-offset 'Set the border offset']
   [border-style 'Set the border style']
   [border-implementation 'Set the border implementation']
   [transparency 'Enable or disable transparency for unfocused windows']
   [transparency-alpha 'Set the alpha value for unfocused window transparency']
   [toggle-transparency 'Toggle transparency for unfocused windows']
   [animation 'Enable or disable movement animations']
   [animation-duration 'Set the duration for movement animations in ms']
   [animation-fps 'Set the frames per second for movement animations']
   [animation-style 'Set the ease function for movement animations']
   [mouse-follows-focus 'Enable or disable mouse follows focus on all workspaces']
   [toggle-mouse-follows-focus 'Toggle mouse follows focus on all workspaces']
   [ahk-app-specific-configuration 'Generate common app-specific configurations and fixes to use in komorebi.ahk']
   [pwsh-app-specific-configuration 'Generate common app-specific configurations and fixes in a PowerShell script']
   [convert-app-specific-configuration 'Convert a v1 ASC YAML file to a v2 ASC JSON file']
   [fetch-app-specific-configuration 'Fetch the latest version of applications.json from komorebi-application-specific-configuration']
   [application-specific-configuration-schema 'Generate a JSON Schema for applications.json']
   [notification-schema 'Generate a JSON Schema of subscription notifications']
   [socket-schema 'Generate a JSON Schema of socket messages']
   [static-config-schema 'Generate a JSON Schema of the static configuration file']
   [generate-static-config 'Generates a static configuration JSON file based on the current window manager state']
   [enable-autostart 'Generates the komorebi.lnk shortcut in tartup to autostart komorebi']
   [disable-autostart 'Deletes the komorebi.lnk shortcut in tartup to disable autostart']
   [help 'Print this message or the help of the given subcommand(s)']
  ]
}

export extern komorebi [
# A tiling window manager for Windows
  --ffm                 (-f) # Allow the use of komorebi's custom focus-follows-mouse implementation
  --await-configuration (-a) # Wait for 'komorebic complete-configuration' to be sent before processing events
  --tcp-port: int       (-t) # Start a TCP server on the given port to allow the direct sending of SocketMessages
  --config: string      (-c) # Path to a static configuration JSON file
  --help                (-h) # Print help
  --version             (-V) # Print version
]

export extern komorebic [
# The command-line interface for Komorebi, a tiling window manager for Windows
  string?: string@'nu-complete komorebic commands'
  --bar  # Start komorebi with bar
  --whkd # Start komorebic with whkd
]
